﻿using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;

namespace Areaexportimg.Utils
{
    public static class ExtendFunctions
    {

        public static int ToInt32(this double value) 
        {
            return Convert.ToInt32(value);
        }
        public static double To2SmallDouble(this double value)
        {
            var strs = value.ToString().Split('.');
            var leftValue = Convert.ToInt32(strs[0].Substring(strs[0].Length - 2, 2));
            var rightValue = 0.0;
            if (strs.Length == 2) 
            {
                rightValue = Convert.ToDouble("0." + strs[1]);
            }
            return leftValue + rightValue;
        }
        public static string ToJson(this object data)
        {
            return JsonConvert.SerializeObject(data);
        }

        public static T ToObject<T>(this string json)
        {
            return JsonConvert.DeserializeObject<T>(json);
        }

        public static bool IsNullOrEmpty(this string str)
        {
            return String.IsNullOrEmpty(str);
        }

        public static bool IsNotNullOrEmpty(this string str)
        {
            return !String.IsNullOrEmpty(str);
        }

        public static long ToLong(this double num)
        {
            return Convert.ToInt64(num);
        }
        public static long ToTimeStamp(this DateTime time)
        {
            return (time.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
        }

        public static DateTime ToDateTime(this long timestamp)
        {
            return new DateTime(1970, 1, 1).AddHours(8).AddMilliseconds(timestamp);
        }
        public static string ToMD5(this string str)
        {
            using (var md5 = MD5.Create())
            {//实例化一个md5对像
                string cl = str;
                string pwd = "";
                // 加密后是一个字节类型的数组，这里要注意编码UTF8/Unicode等的选择　
                byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
                // 通过使用循环，将字节类型的数组转换为字符串，此字符串是常规字符格式化所得
                for (int i = 0; i < s.Length; i++)
                {
                    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母，如果使用大写（X）则格式后的字符是大写字符

                    pwd = pwd + s[i].ToString("x2");

                }
                return pwd;
            }
        }
    }
}
